﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using ProjetoJornada_Negocios.Fachada;
using Basicas;
using Basicas.Utils.excecoes;

namespace ProjetoJornada.Interno
{
    public partial class Matricula_Cadastro : System.Web.UI.Page
    {
        Fachada fachada = Fachada.Instance;

        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                if (Session["Jornada"] == null)
                {
                    Response.Redirect("Jornada_Escolher.aspx?urlReturn=" + HttpContext.Current.Request.Url.AbsolutePath);
                }

                this.MatricularImageButton.Visible = false;
                this.lblPergunta.Visible = false;
                this.TableAluno.Visible = false;        
            }
            
        }

        protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string cpf = this.CPFTextBox.Text;
                cpf = cpf.Replace(".", "");
                cpf = cpf.Replace("-", "");

                Aluno alunoBuscado = fachada.ConsultarAlunoPorCpf(cpf);
                Session["AlunoMatricula"] = alunoBuscado;
                if (alunoBuscado != null)
                {
                    this.lblNome.Text = alunoBuscado.Nome;
                    this.lblEmail.Text = alunoBuscado.Email;

                    this.MatricularImageButton.Visible = true;
                    this.lblPergunta.Visible = true;
                    this.lblMensagem.Text = String.Empty;
                    this.TableAluno.Visible = true;
                    this.cblTurmas.Visible = true;
                    this.gdvTurma.Visible = true;
                    this.ListarCursos(cpf);
                }
            }
            catch (AlunoInexistenteException)
            {
                this.lblMensagem.Text = String.Format("Aluno de CPF {0} não está cadastrado", this.CPFTextBox.Text);
                this.MatricularImageButton.Visible = false;
                this.lblPergunta.Visible = false;
                this.TableAluno.Visible = false;
                this.cblTurmas.Visible = false;
                this.gdvTurma.Visible = false;
            }
            

            
        }

        protected void MatricularImageButton_Click(object sender, ImageClickEventArgs e)
        {
            this.lblMensagem.Text = String.Empty;
            if (this.fachada != null)
            {
                List<Turma> turmas = Session["TurmasMatricula"] as List<Turma>;
                List<Matricula> listaDeMatriculas = new List<Matricula>();
                Aluno aluno = Session["AlunoMatricula"] as Aluno;
                foreach (ListItem item in this.cblTurmas.Items)
                {
                    if (item.Selected)
                    {
                        int idTurmaSelecionada = Convert.ToInt32(item.Value);
                        Turma turma = turmas.Find(itemTurma => itemTurma.Id == idTurmaSelecionada);
                        Matricula matricula = new Matricula(turma, aluno, null, false, 0, DateTime.Now);
                        listaDeMatriculas.Add(matricula);
                    }
                }

                this.fachada.InserirAlunoMatriculas(aluno, listaDeMatriculas);

                Session.Remove("ListaDeTurmaDaJornada");
                Session.Remove("AlunoMatricula");

                Response.Redirect("Matricula_Cadastro.aspx");
            }
        }

        private void ListarCursos(string cpf)
        {
            if (Session["Jornada"] == null)
            {
                Response.Redirect("Jornada_Escolher.aspx?urlReturn=" + HttpContext.Current.Request.Url.AbsolutePath);
            }

            List<Matricula> matriculas = fachada.BuscarMatriculaPorCpf(cpf);
            this.cblTurmas.Items.Clear();
            List<Turma> listaDeTurmas = fachada.ConsultarTodasAsTurmasPorJornada(Convert.ToInt32(Session["Jornada"]));
            int numeroDeTurmas = listaDeTurmas.Count;
            List<ListItem> turmas = new List<ListItem>();

            List<Turma> listaTemp = new List<Turma>();

            for (int i = 0; i < numeroDeTurmas; i++)
            {
                int j = 0;
                Boolean achouMatricula = false;
                while (j < matriculas.Count && !achouMatricula)
                {
                    if (listaDeTurmas[i].Id == matriculas[j].Turma.Id)
                    {
                        achouMatricula = true;
                    }
                    else
                    {
                        j++;
                    }
                }

                if (!achouMatricula)
                {
                    ListItem itemTurma = new ListItem();
                    itemTurma.Text = listaDeTurmas[i].Nome;
                    itemTurma.Value = Convert.ToString(listaDeTurmas[i].Id);
                    turmas.Add(itemTurma);
                }
                else
                {
                    listaTemp.Add(listaDeTurmas[i]);
                }

                Session["TurmasMatricula"] = listaDeTurmas;
            }

            this.gdvTurma.DataSource = listaTemp;
            this.gdvTurma.DataBind();

            if (turmas.Count == 0)
            {
                this.lblPergunta.Text = "Não existem turmas disponiveis para este aluno.";
                this.MatricularImageButton.Visible = false;
            }

            this.cblTurmas.Items.AddRange(turmas.ToArray());         

        }
    }
}
